网站发布新文章后,搜索引擎不一定会立刻发现并收录。传统方式通常需要等待爬虫定期访问,而 IndexNow 提供了一种更主动的通知机制:网站可以在页面新增、更新或删除时,将相关 URL 发送给支持该协议的搜索引擎,帮助它们更快了解内容变化。
下面这段代码展示了如何使用 Node.js 向 IndexNow 提交链接。
首先,代码通过 SHA-256 生成一个 16 位密钥:
const hashKey = createHash('sha256')
.update(authOrigin + Date.now())
.digest('hex')
.slice(0, 16);
密钥用于验证提交请求确实来自网站所有者。随后,程序根据配置确定网站的公开目录,并将密钥写入对应的文本文件:
const uploadDir = join(process.cwd(), Config.publicPath());
writeKeyFile(hashKey, `${uploadDir}/${hashKey}.txt`);
这一步非常重要:IndexNow 服务需要能够通过公开地址访问该文件,并确认文件内容与请求中的密钥一致。因此,网站部署完成后,应检查 keyLocation 对应的 URL 是否可以正常打开,且文件内容是否正确。
接下来,代码向 IndexNow 接口发送 POST 请求:
const response = await $fetch.raw(
'https://api.indexnow.org/indexnow',
{
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
body: {
host: authOrigin,
key: hashKey,
keyLocation: `${authOrigin}/${hashKey}.txt`,
urlList: Array.isArray(pushUrl) ? pushUrl : [pushUrl],
},
}
);
请求体中,host 表示网站域名,key 是生成的密钥,keyLocation 指向密钥文件,urlList 则是需要提交的页面地址。代码兼容单个 URL 和 URL 数组,调用时更加灵活。
实际使用时还应注意,authOrigin 必须与待提交链接的域名一致;密钥文件应部署到公开目录;提交前最好校验 URL,避免发送无效或其他站点的地址。此外,可以根据接口返回状态记录成功或失败信息,便于排查问题。
通过 IndexNow,网站能够更及时地向搜索引擎传递内容更新信号。不过,它并不保证页面一定会被收录,内容质量、网站可访问性以及搜索引擎自身策略仍然会影响最终结果。